package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/*
 * 适用对象输出流进行对象的序列化操作
 *
 * 对象序列化
 * 讲一个对象转换为一组字节的过程，称为对象序列化
 * 转换为一组字节的目的:要么用于保存，要么用于网络传输;
 * */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        String name = "张三";
        int age = 15;
        String gender = "男";
        String[] otheInof = {"无", "开心就好", "打篮球"};
        Person person = new Person(name, age, gender, otheInof);
        //文件输出流(节点流低级流)的作用，:它只能将字节写入到文件当中
        //当前是覆盖写模式
        FileOutputStream fileOutputStream = new FileOutputStream("person.obj", false);
        //那我们如何将person类的实例也写入到文件当中呢？
        //那person对象如何转换为一组字节呢?
        //创建一个对象流并且连接到文件输出流上
        ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
        /*
         * boolean writeObject();
         * 该方法是对象输出流独有的方法，作用是将给的对象序列化为一组字节后再通过其链接的流将字节写出
         *
         * 当前对象流是链接在文件流上的，因此将对象序列化后的字节通过其链接的文件流写入到person.obj文件上
         * 此方法可以直接将对象写入到抽象路径的文件当中
         *
         *  注意:
         *  在使用对象输出流进行对象序列化时，writeObject方法要求写出的对象必须实现可序列化接口java.io.Serializable
         *
         *  对象流甚至可以通过更换低级流为网络流之后实现对网络的对象传输实现程序之间的联机操作
         * */
        outputStream.writeObject(person);
        System.out.println("写入完毕");
        //关闭对象流
        outputStream.close();
    }
}
